package com.wang.ddp.config;

import com.wang.ddp.utils.LoginInterceptor;
import com.wang.ddp.utils.RefreshTokenInterceptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

/**
 * @author wjh
 * @create 2023-04-19
 */
@Configuration
public class MvcConfig implements WebMvcConfigurer {


    @Autowired
    //虽然LoginInterceptor的StringRedisTemplate类不会被自动注入，
    //但是我们可以在MvcConfig中创建LoginInterceptor时，传一个StringRedisTemplate
    //就可以了，因为MvcConfig是配置类，可以自动注入属性
    StringRedisTemplate stringRedisTemplate;
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        /**
         * 添加自定义的拦截器
         * 1、拦截器默认拦截所有请求
         * 2、excludePathPatterns排除不需要拦截的路径
         * 3、拦截器也是有先后顺序的，默认按照代码的先后顺序，也可以通过order()方法设置权重，值越小，优先级越高
         */

        registry.addInterceptor(new RefreshTokenInterceptor(stringRedisTemplate)).order(0);
        registry.addInterceptor(new LoginInterceptor())
                .excludePathPatterns(
                        "/user/code",
                        "/user/login",
                        "/blog/hot",
                        "/shop/**",
                        "/shop-type/**",
                        "/upload/**",
                        "/voucher/**").order(1);       //排除不需要拦截的路径
    }
}
